#!/usr/bin/env ruby
require 'optparse'
require_relative 'common'

@help = <<~HELP
  初次配置 openSuse 系统软件源。

  该工具接受一个参数，它是提供者的名称。
  
  现在支持的提供者包括：

  #{vendors_help}

  示例：

      repos add aliyun

HELP

def add(vendor_key)
  if vendor_key == 'system'
    STDERR.puts '禁止添加系统自带的软件源'
    exit 1
  end

  host = @vendors[vendor_key.to_sym][:host]
  vendor = @vendors[vendor_key.to_sym][:name]
  version = find_opensuse_version('full')

  if version[0] == 'opensuse-leap'
    system("sudo zypper addrepo -f #{host}/update/leap/#{version[1]}/oss/ #{n(vendor, version, 'Update-Oss')}")
    system("sudo zypper addrepo -f #{host}/update/leap/#{version[1]}/non-oss/ #{n(vendor, version, 'Update-Non-Oss')}")
    system("sudo zypper addrepo -f #{host}/distribution/leap/#{version[1]}/repo/oss/ #{n(vendor, version, 'Oss')}")
    system("sudo zypper addrepo -f #{host}/distribution/leap/#{version[1]}/repo/non-oss/ #{n(vendor, version, 'Non-Oss')}")
  elsif version[0] == 'opensuse-tumbleweed'
    system("sudo zypper addrepo -f #{host}/tumbleweed/repo/oss/ #{n(vendor, version, 'Oss')}")
    system("sudo zypper addrepo -f #{host}/tumbleweed/repo/non-oss/ #{n(vendor, version, 'Non-Oss')}")
  else
    raise
  end
end

alias :n :normalize_repo_name

ARGV.push('--help') if ARGV.empty?
begin
  OptionParser.new do |opts|
    opts.banner = @help
  end.parse!
rescue OptionParser::ParseError => ex
  STDERR.puts ex.message
  exit 1
end

if ARGV.length > 1
  STDERR.puts '只可提供一个提供者' 
  exit 2
else
  vendor_key = ARGV[0].downcase
end
unless @vendors.keys.include?(vendor_key.to_sym)
  STDERR.puts '未发现提供者' 
  exit 3
end

add(vendor_key)
